import { createCrawl } from 'x-crawl' // 爬虫工具
import dotenv from 'dotenv'   // 环境变量工具
import fetch from 'node-fetch' // 用于发送HTTP请求

dotenv.config()   // 加载环境变量

// 创建爬虫
const crawlApp = createCrawl({
    maxRetry: 3, // 最大重试次数，默认为3
    intervalTime: 1000, // 重试间隔时间，默认为1000ms
})

// 调用本地Ollama API的函数
async function callOllama(prompt) {
    const ollamaUrl = process.env.OLLAMA_URL || 'http://localhost:11434/api/generate'
    const modelName = 'deepseek-r1:1.5b'

    const response = await fetch(ollamaUrl, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify({
            model: modelName,
            prompt: prompt,
            stream: false
        })
    })

    if (!response.ok) {
        throw new Error(`Ollama API请求失败: ${response.statusText}`)
    }

    const data = await response.json()
    return data.response
}

crawlApp.crawlPage('https://movie.douban.com/chart').then(async (res) => {
    const { page, browser } = res.data // 获取页面的HTML内容

    const targetSelector = '.article'
    await page.waitForSelector(targetSelector) // 等待页面加载完成
    const highlyHTML = await page.$eval(targetSelector, (element) => element.innerHTML) // 获取目标元素的HTML内容

    // 构造提示词
    const prompt = `
    请解析以下HTML内容，获取电影评分，将评分不小于8.0的电影名称和评分，用json格式返回。
    格式要求:
    {
        "name": "电影名称",
        "score": "电影评分",
        "img": "电影图片"
    }
    
    HTML内容:
    ${highlyHTML}
    `

    // 调用本地Ollama服务
    try {
        const result = await callOllama(prompt)
        console.log('解析结果:', result)
    } catch (error) {
        console.error('调用Ollama API时出错:', error)
    } finally {
        browser.close() // 关闭浏览器
    }
})